from deepdiff import DeepDiff

# 定义两个包含字典的列表（模拟用户数据）
users1 = [
    {
        "id": 1,
        "name": "Alice",
        "age": 30,
        "sensitive_data": "password123",  # 敏感数据，需要排除
        "metadata": {
            "last_login": "2023-05-20T10:30:00",  # 时间戳，可能变化
            "user_agent": "Mozilla/5.0"
        }
    },
    {
        "id": 2,
        "name": "Bob",
        "age": 25,
        "sensitive_data": "securepass",
        "metadata": {
            "last_login": "2023-05-19T15:45:00",
            "user_agent": "Chrome/91.0"
        }
    }
]

users2 = [
    {
        "id": 1,
        "name": "Alice",
        "age": 31,  # 年龄变更
        "sensitive_data": "newpassword456",  # 敏感数据变更（需排除）
        "metadata": {
            "last_login": "2023-05-21T09:15:00",  # 时间戳变更
            "user_agent": "Mozilla/5.0"
        }
    },
    {
        "id": 2,
        "name": "Robert",  # 名字变更
        "age": 25,
        "sensitive_data": "newsecurepass",  # 敏感数据变更（需排除）
        "metadata": {
            "last_login": "2023-05-20T20:30:00",  # 时间戳变更
            "user_agent": "Chrome/92.0"  # 浏览器版本变更
        }
    }
]

# 方式一：使用 exclude_paths 排除特定属性
diff_method1 = DeepDiff(
    users1, users2,
    exclude_regex_paths=[
        r"root\[\d+\]\['sensitive_data'\]",  # 排除所有用户的敏感数据
        r"root\[\d+\]\['metadata'\]\['last_login'\]"  # 排除时间戳字段
    ]
)

# 输出结果
print("### 方式一：使用路径表达式排除后的差异 ###")
print(diff_method1.pretty())
